package cn.iocoder.yudao.module.ao.service.schedule;

import java.util.*;
// import javax.validation.*;
// import cn.iocoder.yudao.module.ao.controller.admin.schedule.vo.*;
// import cn.iocoder.yudao.module.ao.dal.dataobject.schedule.ScheduleDO;
// import cn.iocoder.yudao.framework.common.pojo.PageResult;
// import cn.iocoder.yudao.framework.common.pojo.PageParam;

/**
 * 课程安排 Service 接口
 *
 * @author 小y
 */
public interface ScheduleService {

    /* 
     * ============================================================
     * 以下方法已废弃 - 不适用于新的 jx_senior_vocational_class_schedule 表结构
     * ============================================================
     */

    // /**
    //  * 创建课程安排
    //  *
    //  * @param createReqVO 创建信息
    //  * @return 编号
    //  */
    // Long createSchedule(@Valid ScheduleSaveReqVO createReqVO);

    // /**
    //  * 更新课程安排
    //  *
    //  * @param updateReqVO 更新信息
    //  */
    // void updateSchedule(@Valid ScheduleSaveReqVO updateReqVO);

    // /**
    //  * 删除课程安排
    //  *
    //  * @param id 编号
    //  */
    // void deleteSchedule(Long id);

    // /**
    // * 批量删除课程安排
    // *
    // * @param ids 编号
    // */
    // void deleteScheduleListByIds(List<Long> ids);

    // /**
    //  * 获得课程安排
    //  *
    //  * @param id 编号
    //  * @return 课程安排
    //  */
    // ScheduleDO getSchedule(Long id);

    // /**
    //  * 获得课程安排分页
    //  *
    //  * @param pageReqVO 分页查询
    //  * @return 课程安排分页
    //  */
    // PageResult<ScheduleDO> getSchedulePage(SchedulePageReqVO pageReqVO);

    // /**
    //  * 获取课程表数据
    //  *
    //  * @param location 地点(可选)
    //  * @param weekNumber 周次
    //  * @param teacherName 教师姓名(可选)
    //  * @return 课程表数据
    //  */
    // List<ScheduleDO> getScheduleTable(String location, Integer weekNumber, String teacherName);

    // /**
    //  * 检查时间冲突
    //  *
    //  * @param reqVO 检查请求
    //  * @return 冲突检查结果
    //  */
    // ScheduleConflictCheckRespVO checkConflict(ScheduleConflictCheckReqVO reqVO);

    /**
     * 获取所有上课地点列表
     *
     * @return 地点列表
     */
    List<String> getLocationList();

    /**
     * 获取教师个人课表(纵向展示)
     * 从横向的weekday字段中筛选出包含该教师的课程
     *
     * @param teacherName 教师姓名
     * @param term 学期(可选)
     * @return 教师课表列表
     */
    List<cn.iocoder.yudao.module.ao.controller.admin.schedule.vo.TeacherScheduleRespVO> getTeacherSchedule(String teacherName, String term);

    /**
     * 更新某节课的课程内容
     *
     * @param id 数据行ID
     * @param dayOfWeek 星期几(1-7)
     * @param courseContent 课程内容
     * @param teacherName 当前教师姓名(用于权限校验)
     */
    void updateCourseContent(Long id, Integer dayOfWeek, String courseContent, String teacherName);
    
    /**
     * 添加新课程
     *
     * @param className 班级名
     * @param classSection 时段
     * @param dayOfWeek 星期几(1-7)
     * @param classroom 教室
     * @param courseContent 课程内容
     * @param teacherName 教师姓名
     */
    void addNewCourseContent(String className, String classSection, Integer dayOfWeek, 
                             String classroom, String courseContent, String teacherName);

    /**
     * 检查时间段和教室是否有冲突
     *
     * @param classSection 时段(如 "早1")
     * @param classroom 教室
     * @param dayOfWeek 星期几(1-7)
     * @param excludeId 排除的数据行ID(更新时用)
     * @return 冲突的教师姓名,无冲突返回null
     */
    String checkTimeConflict(String classSection, String classroom, Integer dayOfWeek, Long excludeId);

}